// 封装网络请求
import { getToken, removeToken } from '@/utils/token'
import theAxios from 'axios'
import { Notify } from 'vant'
import { refreshTokenAPI } from '@/api'
const axios = theAxios.create({
  baseURL: 'http://geek.itheima.net/',
  // baseURL: 'https://toutiao.itheima.net/',
  timeout: 20000// 请求20秒无响应直接判定超时
})
// 添加请求拦截器
axios.interceptors.request.use(config => {
  // 为请求配置Token认证字段
  // ？.可选链操作符，如果前对象里没有length,整个表达式原地返回undefined
  if (getToken()?.length > 0 && config.headers.Authorization === undefined) {
    config.headers.Authorization = `Bearer ${getToken()}`
    return config
  }
}, err => {
  return Promise.reject(err)
})
// 添加响应拦截器
axios.interceptors.response.use(res => res, async (err) => {
  // console.log(err)
  // 401代表身份过期
  if (err.response.status === 401) {
    // 不能使用this.$msg,this.$router,因为this不是vue组件对象无法调用
    Notify({ type: 'warning', message: '身份已过期' })
    // 清除Token
    removeToken()
    // 方式一：跳转到登录页
    // router.replace('/login')
    // 方式二：token续签
    const res = await refreshTokenAPI()
    console.log(res)
  }
})
export default ({ url, method = 'get', params = {}, data = {}, headers = {} }) => {
  return axios({
    url,
    method,
    params,
    data,
    headers
  })
}
